package com.skivingcloud.develop.service;

import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
import com.skivingcloud.common.exceptions.BusinessException;
import com.skivingcloud.common.utils.PageParameter;
import com.skivingcloud.develop.entity.SysBusinessDesigner;

/**
 * 应用设计记录 服务层。
 *
 * @author skivingcloud
 * @since 2024-01-18
 */
public interface SysBusinessDesignerService extends IService<SysBusinessDesigner> {
    /**
     * 分页查询应用设计记录
     *
     * @param parameter 查询参数
     * @return 分页查询结果
     */
    Page<SysBusinessDesigner> queryByPage(PageParameter<SysBusinessDesigner> parameter);
    
    /**
     * 根据编号获取表单信息
     * @param designerCode 表单设计编号
     * @param type 类型：1-新增表单、2-修改表单、3-详情表单
     * @return 表单设计信息
     */
    SysBusinessDesigner getSysBusinessDesignerByCodeHasJson(String designerCode, String type)  throws BusinessException;

    /**
     * 根据id获取表单信息（包含表单下的组件信息）
     * @param designerId 表单id
     * @return 表单信息
     */
    SysBusinessDesigner getSysBusinessDesignerHasDetail(String designerId);

    /**
     * 根据主键更新应用设计记录。若源记录已发布则生成新记录
     * @param sysBusinessDesigner 应用设计记录
     * @return 结果
     */
    Boolean updateVersion(SysBusinessDesigner sysBusinessDesigner);

    /**
     * 根据编码获取最新版本已发布的信息
     * @param code 表单设计编码
     * @return 表单设计详情
     */
    SysBusinessDesigner getLatestInfoByCode(String code);

    /**
     * 保存表单设计，如果状态为发布则同时根据表单、组件信息动态生成业务数据库表
     * @param sysBusinessDesigner 表单设计信息
     * @return 结果
     */
    Boolean saveAndCreateTable(SysBusinessDesigner sysBusinessDesigner);
}
